﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Safe_Driving
{
    class Verificator
    {

        /// <summary>
        /// Vérifie la syntaxe d'un nom ou d'un prénom.
        /// </summary>
        /// <param name="nom">Le nom dont on souhaite vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertName(string nom)
        {
            Regex r = new Regex("^[a-zA-Z\\s\\-]+$");
            if (r.IsMatch(nom))
                return true;
            else
                return false;
        }


        /// <summary>
        /// Vérifie la syntaxe d'un code postal français.
        /// </summary>
        /// <param name="cp">Le code postal dont on souhaite vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertFrenchCP(string cp)
        {
            Regex r = new Regex("^[0-9]{5}$");
            if (r.IsMatch(cp))
                return true;
            else
                return false;
        }


        /// <summary>
        /// Vérifie la syntaxe du nom d'une ville.
        /// </summary>
        /// <param name="city">Le nom de la ville dont on souhaite vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertCity(string city)
        {
            Regex r = new Regex("^[a-zA-Z\\s\\-]+$");
            if (r.IsMatch(city))
                return true;
            else
                return false;
        }


        /// <summary>
        /// Vérifie la syntaxe d'un numéro de téléphone français fixe au format national (commence par un "0").
        /// </summary>
        /// <param name="telephoneNumber">Le numéro de téléphone dont on souhaite vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertTelFixeNumber(string telephoneNumber)
        {
            Regex r = new Regex("^(01|02|03|04|05|09)[0-9]{8}$");
            if (r.IsMatch(telephoneNumber))
                return true;
            else
                return false;
        }


        /// <summary>
        /// Vérifie la syntaxe d'un numéro de téléphone français portable au format national (commence par un "0").
        /// </summary>
        /// <param name="telephoneNumber">Le numéro de téléphone dont on souhaite vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertTelPortableNumber(string telephoneNumber)
        {
            Regex r = new Regex("(06|07)[0-9]{8}$");
            if (r.IsMatch(telephoneNumber))
                return true;
            else
                return false;
        }


        /// <summary>
        /// Vérifie la syntaxe d'une adresse e-mail.
        /// </summary>
        /// <param name="email">L'adresse e-mail dont on souhiate vérifier la syntaxe.</param>
        /// <returns>Retourne vrai si la syntaxe est correcte, faux sinon.</returns>
        public bool AssertEMail(string email)
        {
            Regex r = new Regex("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
            if (r.IsMatch(email))
                return true;
            else
                return false;
        }


        // A VERIFIER
        public bool AssertMonney(string monnaie)
        {
            Regex r = new Regex(@"^(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$");
            if (r.IsMatch(monnaie))
                return true;
            else
                return false;
        }

        //Ok pour [0;99]
        public bool AssertNumber(string number)
        {
            Regex r = new Regex(@"^[0-9]{1,2}$");
            if (r.IsMatch(number))
                return true;
            else
                return false;
        }
    }
}
